Security Hubでコントロールの一覧とARNを取得する
Security Hubで不要なコントロールを無効化しようとしましたが、「コントロールのARN」が必要でした。 本記事では、Security Hubのコントロールの一覧とARNを取得してみました。
おすすめの方
- Security Hubのコントロールの一覧を取得したい方
- Security HubのコントロールのARNを取得したい方
Security Hubのコントロールの一覧とARNを取得する
DescribeStandardsControls
を使います。
しかし、StandardsSubscriptionArn
とやらの指定が必要なので、先に取得します。
StandardsSubscriptionArnを取得する
GetEnabledStandards
で取得できます。
$ aws securityhub get-enabled-standards { "StandardsSubscriptions": [ { "StandardsSubscriptionArn": "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0", "StandardsArn": "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0", "StandardsStatus": "READY" }, { "StandardsSubscriptionArn": "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0", "StandardsArn": "arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0", "StandardsStatus": "READY" } ] }
2つのStandardsSubscriptionArn
が取得できました。この2つは、次のセキュリティ基準に該当します。
コントロールの一覧を取得する
さきほどのセキュリティ基準それぞれで、コントロールを取得すればOKです。
AWS 基礎セキュリティのベストプラクティス v1.0.0
aws securityhub describe-standards-controls \ --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0"
CIS AWS Foundations Benchmark v1.2.0
aws securityhub describe-standards-controls \ --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0"
必要に応じて、次のように> controls.json
を付与して実行すれば、別のプログラムで結果を扱いやすくなります(JSONのため)。
aws securityhub describe-standards-controls \ --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0" \ > controls.json
query指定の参考
特定の情報だけで良い場合は、query
を利用すると便利です。
StandardsControlArnのみ欲しい
$ aws securityhub describe-standards-controls \ --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0" \ --query 'Controls[*].StandardsControlArn' [ "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/ACM.1", "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/APIGateway.1", ...省略... ]
特定の情報をdict形式で欲しい
$ aws securityhub describe-standards-controls \ --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0" \ --query 'Controls[*].{ControlId:ControlId,ControlStatus:ControlStatus,SeverityRating:SeverityRating,Title:Title,StandardsControlArn:StandardsControlArn}' [ { "ControlId": "ACM.1", "ControlStatus": "ENABLED", "SeverityRating": "MEDIUM", "Title": "Imported and ACM-issued certificates should be renewed after a specified time period", "StandardsControlArn": "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/ACM.1" }, { "ControlId": "APIGateway.1", "ControlStatus": "ENABLED", "SeverityRating": "MEDIUM", "Title": "API Gateway REST and WebSocket API execution logging should be enabled", "StandardsControlArn": "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/APIGateway.1" }, {...省略...} ]
特定の情報をdict形式で欲しい(無効なやつだけ)
$ aws securityhub describe-standards-controls \ --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0" \ --query 'Controls[?ControlStatus==`DISABLED`].{ControlId:ControlId,ControlStatus:ControlStatus,SeverityRating:SeverityRating,Title:Title,StandardsControlArn:StandardsControlArn}' [ { "ControlId": "Account.1", "ControlStatus": "DISABLED", "SeverityRating": "MEDIUM", "Title": "Security contact information should be provided for an AWS account.", "StandardsControlArn": "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/Account.1" } ]
さいごに
Security Hubでコントロールの一覧を取得してみました。
--query
オプションと併用することで、欲しい情報だけを取得できます。